class Perfil < ActiveRecord::Base
  validates_presence_of :nombre
  has_and_belongs_to_many :usuarios
  has_many :accesos
  has_many :permisos
  has_many :acciones, :through => :permisos
  has_many :modulos, :through => :accesos
  named_scope :acciones_distintas,:include=>:acciones

  default_scope :order => :nombre

  def modulos_principales
    @modulos_principales||=self.modulos.principales
  end

  def submodulos
    @submodulos||=self.modulos.submodulos
  end

  def controllers
    self.acciones.all(:select=>"distinct controller_id").map(&:controller)
  end

  #Se encarga de conceder permiso al index de los controllers que actuan como
  #módulos cuando se le permite el acceso a un modulo en la edicion del perfil.
  def self.grant_permiso(p)
    mods=p.modulos_principales
    mods.each do |m|
      controller_def=Modulo::MenuOpts[m.orden][:link][:controller]
      controller_nom = controller_def ? controller_def.to_s : m.nombref
      a = Accion.find_by_controller_nombre(controller_nom).find_by_nombre('index')
      p.acciones<<a
      p.save
    end
  end
end
